Discriminated unions | TypeScript Class